home *** CD-ROM | disk | FTP | other *** search
/ SGI Hot Mix 17 / Hot Mix 17.iso / HM17_SGI / research / lib / text_alloc.pro < prev    next >
Text File  |  1997-07-08  |  10KB  |  348 lines

  1. ;
  2. ; $Id: text_alloc.pro,v 1.10 1997/01/15 03:11:50 ali Exp $
  3. ;
  4. ;  WidText
  5. ;   Widget Text class library
  6. ;
  7. ; Copyright (c) 1993-1997, Research Systems, Inc.  All rights reserved.
  8. ;   Unauthorized reproduction prohibited.
  9. ;
  10. ; MODIFICATION HISTORY
  11. ;       Written by:     Joshua Goldstein,       12/93
  12. ;
  13. ;
  14.  
  15.  
  16. ;
  17. ;  TEXT_Icon
  18. ;       Return the text toolbar icon
  19. ;
  20. FUNCTION TEXT_Icon
  21.   RETURN, [ $
  22.     [ 0b, 0b, 0b, 0b ], $
  23.     [ 0b, 0b, 0b, 0b ], $
  24.     [ 0b, 0b, 0b, 0b ], $
  25.     [ 252b, 255b, 255b, 63b ], $
  26.     [ 252b, 255b, 255b, 63b ], $
  27.     [ 12b, 0b, 0b, 48b ], $
  28.     [ 12b, 0b, 128b, 51b ], $
  29.     [ 12b, 14b, 3b, 49b ], $
  30.     [ 12b, 31b, 3b, 49b ], $
  31.     [ 140b, 49b, 3b, 49b ], $
  32.     [ 140b, 49b, 3b, 49b ], $
  33.     [ 140b, 49b, 3b, 49b ], $
  34.     [ 140b, 49b, 59b, 49b ], $
  35.     [ 140b, 63b, 127b, 49b ], $
  36.     [ 140b, 63b, 103b, 49b ], $
  37.     [ 140b, 49b, 99b, 49b ], $
  38.     [ 140b, 49b, 103b, 49b ], $
  39.     [ 140b, 49b, 127b, 49b ], $
  40.     [ 140b, 49b, 59b, 49b ], $
  41.     [ 12b, 0b, 0b, 49b ], $
  42.     [ 12b, 0b, 128b, 51b ], $
  43.     [ 12b, 0b, 0b, 48b ], $
  44.     [ 12b, 0b, 0b, 48b ], $
  45.     [ 12b, 0b, 0b, 48b ], $
  46.     [ 252b, 255b, 255b, 63b ], $
  47.     [ 252b, 255b, 255b, 63b ], $
  48.     [ 0b, 0b, 0b, 0b ], $
  49.     [ 0b, 0b, 0b, 0b ], $
  50.     [ 0b, 0b, 0b, 0b ], $
  51.     [ 0b, 0b, 0b, 0b ], $
  52.     [ 0b, 0b, 0b, 0b ], $
  53.     [ 0b, 0b, 0b, 0b ]  $
  54.   ]
  55. END
  56.  
  57. ;
  58. ;  TEXT_Copy
  59. ;   Copy a text.  2 copy methods:
  60. ;
  61. ;   if( copy != NULL)       { *copy = *ptr; free(ptr); }
  62. ;   else                    { *(copy = malloc(...)) = *ptr; }
  63. ;
  64. PRO TEXT_Copy, Ptr, Copy
  65.     GenCopy, Ptr, Copy, /HASVALUE
  66. END
  67.  
  68.  
  69. ;
  70. ;  TEXT_Destroy
  71. ;   Release resources for the given text widget.
  72. ;
  73. PRO TEXT_Destroy, Ptr
  74.     GenDestroy, Ptr, /HASVALUE
  75. END
  76.  
  77.  
  78. ;
  79. ;  TEXT_Event
  80. ;   Event handling routine for text dialog
  81. ;
  82. PRO TEXT_Event, Event
  83.  
  84.     WIDGET_CONTROL, Event.Id, GET_UVALUE=Ev                 ; Get Event
  85.     WIDGET_CONTROL, Event.Top, GET_UVALUE=Binfo, /NO_COPY   ; Get Dialog Info
  86.     Ptr2Obj, Binfo.ObjPtr, Obj                              ; Get Object
  87.  
  88.     CASE Ev OF
  89.  
  90.     'LITERAL':      BEGIN                   ; UNIMPLEMENTED (IDL v. Literal)
  91.         Obj.ValueType       = 0
  92.         WIDGET_CONTROL, Binfo.EditId, SENSITIVE=0
  93.         END
  94.     'CODEBASED':    BEGIN                   ; UNIMPLEMENTED (IDL v. Literal)
  95.         Obj.ValueType       = 1
  96.         WIDGET_CONTROL, Binfo.EditId, SENSITIVE=1
  97.         END
  98.  
  99.     'MAINTEXT': WIDGET_CONTROL, Obj.Value1, SET_UVALUE=Event.Value
  100.     'VALUETEXT':Obj.Value2      = Event.Value   ; UNIMPLEMENTED
  101.  
  102.     'FONT':     Obj.Font        = Event.Value
  103.     'NAME':     Obj.Name        = Event.Value   ; Other
  104.     'FRAME':    Obj.FrameSize   = Event.Value
  105.     'UVALUE':   Obj.Uvalue      = Event.Value
  106.     'XSIZE':    Obj.XSize       = Event.Value   ; XY Stuff
  107.     'YSIZE':    Obj.YSize       = Event.Value
  108.     'XOFFSET':  Obj.XOffset     = Event.Value
  109.     'YOFFSET':  Obj.YOffset     = Event.Value
  110.  
  111.     'ALLEV':    Obj.AllEvent    = 1 - Obj.AllEvent
  112.     'EDIT':     Obj.TextEdit    = 1 - Obj.TextEdit
  113.     'NO_NL':    Obj.TextNoNL    = 1 - Obj.TextNoNL
  114.     'SCROLLS':  Obj.TextScrolls = 1 - Obj.TextScrolls
  115.  
  116.     'XFONT':    DoXFont, Obj, Binfo.Foci[1]
  117.  
  118.     'DONE':     BEGIN
  119.         Accept, Obj, Binfo.ObjPtr
  120.         WIDGET_CONTROL, Event.Top, SET_UVALUE=Binfo, /NO_COPY
  121.         WIDGET_CONTROL, Event.Top, /DESTROY
  122.         RETURN
  123.         END
  124.  
  125.     'CANCEL':   BEGIN
  126.         Cancel, Obj, Binfo.ObjPtr
  127.         RETURN
  128.         END
  129.     ELSE:           MESSAGE, 'Unprocessed event: ' + Ev
  130.     ENDCASE
  131.  
  132.     Dirty   = 1     ; We've changed something since the last save
  133.  
  134.     SetNextFocus, Binfo, Event      ; Set next keyboard focus as necessary
  135.     Obj2Ptr, Obj, Binfo.ObjPtr      ; Put object back into pointer
  136.     WIDGET_CONTROL, Event.Top, SET_UVALUE=Binfo, /NO_COPY
  137. END
  138.  
  139.  
  140. ;
  141. ;  TEXT_Build
  142. ;   Create a dialog box a text object.  If ptr is nil then
  143. ;   create the object as well.
  144. ;
  145. PRO TEXT_Build, Ptr, ParPtr
  146.  
  147.   COMMON WidEd_Comm
  148.  
  149.     TEXT_Alloc, ParPtr, Ptr                 ; Allocate object if necessary
  150.     MgrName = 'WE_TEXT' + STRTRIM(Ptr, 2)   ; Create dialog box name
  151.     IF XRegistered(MgrName) THEN RETURN     ; See if it already exists
  152.  
  153.     Title   = GetId(Ptr) + '(Child of ' + GetId(ParPtr) + ')'
  154.     Ptr2Obj, Ptr, Obj
  155.  
  156.     ;   Create dialog box
  157.  
  158.     IF SmallScreen[0] NE 0 THEN BEGIN
  159.         Base    = WIDGET_BASE(/COLUMN, TITLE=Title, GROUP_LEADER=TopDlg, $
  160.                         X_SCROLL_SIZE=SmallScreen[0], $
  161.                         Y_SCROLL_SIZE=SmallScreen[1] )
  162.     ENDIF ELSE BEGIN
  163.         Base    = WIDGET_BASE(/COLUMN, TITLE=Title, GROUP_LEADER=TopDlg)
  164.     ENDELSE
  165.     Foci    = LONARR(8)
  166.  
  167.     Base1   = WIDGET_BASE(Base, /COLUMN, /FRAME)
  168.     ; Lab       = WIDGET_LABEL(Base1, VALUE="Basic Information")
  169.     BuildEdit, Base1, Obj, _EditId
  170.     Base2   = WIDGET_BASE(Base1,/ROW)
  171.     Foci[0] = Field(Base2, "Font:", Obj.Font, 'FONT', SIZE=50,/STR)
  172.     IF !Version.OS NE 'Win32' AND !Version.OS NE 'MacOS' THEN $
  173.         XFontBtn    = WIDGET_BUTTON(Base2, VALUE="XFont", UVALUE="XFONT")
  174.  
  175.     Base2   = WIDGET_BASE(Base1, COLUMN=3, /NONEXCLUSIVE)
  176.     Button  = WIDGET_BUTTON(Base2, VALUE='Text Editable', UVALUE='EDIT')
  177.     IF Obj.TextEdit THEN WIDGET_CONTROL, Button, /SET_BUTTON
  178.     Button  = WIDGET_BUTTON(Base2, VALUE='No Auto-Newline', UVALUE='NO_NL')
  179.     IF Obj.TextNoNL THEN WIDGET_CONTROL, Button, /SET_BUTTON
  180.     Button  = WIDGET_BUTTON(Base2, VALUE='Add Scrollbars', UVALUE='SCROLLS')
  181.     IF Obj.TextScrolls THEN WIDGET_CONTROL, Button, /SET_BUTTON
  182.     Button  = WIDGET_BUTTON(Base2, VALUE='Process All Events',UVALUE='ALLEV')
  183.     IF Obj.AllEvent THEN WIDGET_CONTROL, Button, /SET_BUTTON
  184.  
  185.     BuildOther, Base1, Obj, Foci, 1, /FRAME
  186.  
  187.     Base1   = WIDGET_BASE(Base, /FRAME, /COLUMN)
  188.     Lab     = WIDGET_LABEL(Base1, VALUE="Text Appearance Controls")
  189.     BuildXY, Base1, Obj, Foci, 4, /SIZE, /OFFSET
  190.     BuildOkCancel, Base, Obj
  191.  
  192.     DlgInfo     = {             $
  193.         Foci:       Foci,       $
  194.         EditId:     _EditId,    $
  195.         ObjPtr:     Ptr         $
  196.     }
  197.     Obj.Dialog  = Base
  198.     WIDGET_CONTROL, Base, SET_UVALUE=DlgInfo, /NO_COPY
  199.     WIDGET_CONTROL, Base, /REALIZE
  200.     XMANAGER, MgrName, Base, EVENT_HANDLER='TEXT_Event', CLEANUP='MISC_Kill'
  201.     Obj2Ptr, Obj, Ptr
  202. END
  203.  
  204.  
  205. ;
  206. ;  TEXT_Save
  207. ;   Save text information to a file.
  208. ;   Store value as well: If value is nil, make up a value.
  209. ;
  210. ;   FORMAT:
  211. ;       <text object>
  212. ;       <number of elements in value>
  213. ;       <value>
  214. ;
  215. PRO TEXT_Save, Unit, Ptr
  216.     GenWrite, Unit, Ptr, DEFAULT=''
  217. END
  218.  
  219.  
  220. ;
  221. ;  TEXT_Restore
  222. ;   Read in a text object from a file
  223. ;
  224. PRO TEXT_Restore, Unit, Parent, Ptr
  225.     MISC_Restore, Unit, Parent, Ptr, "TEXT", 1
  226. END
  227.  
  228.  
  229. ;
  230. ;  TEXT_Generate
  231. ;   Create a text object for previewing
  232. ;
  233. PRO TEXT_Generate, Base, Ptr
  234.   COMMON WidEd_Comm
  235.  
  236.     Ptr2Obj, Ptr, Obj
  237.     Id  = 0L            ; Prevent EXECUTE from creating a new variable
  238.  
  239.     GetValue, Obj, Names, ""        ; Get Value (or use default)
  240.  
  241.     ;   Generate command string
  242.  
  243.     Cmd = 'Id = WIDGET_TEXT(Base,VALUE=Names'
  244.     IF Obj.TextEdit THEN Cmd = Cmd + ',/EDITABLE'
  245.     SAddCmd, Cmd, Obj.Font, 'FONT'
  246.     IAddCmd, Cmd, Obj.FrameSize, 'FRAME'
  247.     IF Obj.TextNoNL THEN Cmd = Cmd + ',/NO_NEWLINE'
  248.     IF Obj.TextScrolls THEN Cmd = Cmd + ',/SCROLL'
  249.     IAddCmd, Cmd, Obj.XSize, 'XSIZE'
  250.     IAddCmd, Cmd, Obj.YSize, 'YSIZE'
  251.     IAddCmd, Cmd, Obj.XOffset, 'XOFFSET'
  252.     IAddCmd, Cmd, Obj.YOffset, 'YOFFSET'
  253.  
  254.     ;   Automatically make text big enough if the user
  255.     ;   doesn't specify Ysize
  256.     IF Obj.YSize EQ 0 THEN BEGIN
  257.         Cmd = Cmd + ',YSIZE='+STRTRIM(N_ELEMENTS(Names),2)
  258.     ENDIF
  259.  
  260.     Obj2Ptr, Obj, Ptr
  261.  
  262.     ; Create text widget by executing the command string we just built
  263.  
  264.     IF EXECUTE(Cmd+')') NE 1 THEN BEGIN
  265.         MESSAGE,'Could not create text ' + VarName(Ptr)
  266.     ENDIF
  267. END
  268.  
  269.  
  270. ;
  271. ;  TEXT_GenWid
  272. ;   Create IDL code for creating a text widget
  273. ;
  274. PRO TEXT_GenWid, Unit, Ptr, Parent
  275.  
  276.     Name    = VarId(Ptr)                ; Get variable name of object
  277.     Ptr2Obj, Ptr, Obj                   ; Get object info
  278.  
  279.     TextName    = 'TextVal' + STRTRIM(Ptr,2)    ; Create value name
  280.     SaveStr, Unit, Ptr, Obj, TextName, ""       ; Generate value code
  281.  
  282.     XPRINTF, Unit, FORMAT='("  ",A," = WIDGET_TEXT( ",A,",VALUE=",A)', $
  283.         Name, Parent, TextName, /NO_EOL
  284.     IF Obj.AllEvent THEN ISaveCmd, Unit, 1, "ALL_EVENTS"
  285.     ISaveCmd, Unit, Obj.TextEdit, "EDITABLE"
  286.     SSaveCmd, Unit, Obj.Font, "FONT"
  287.     ISaveCmd, Unit, Obj.FrameSize, "FRAME"
  288.     ISaveCmd, Unit, Obj.TextNoNL, "NO_NEWLINE"
  289.     SSaveCmd, Unit, UValue(Obj, Ptr), "UVALUE"
  290.     ISaveCmd, Unit, Obj.XOffset, "XOFFSET"
  291.     ISaveCmd, Unit, Obj.XSize, "XSIZE"
  292.     ISaveCmd, Unit, Obj.YOffset, "YOFFSET"
  293.     ISaveCmd, Unit, Obj.YSize, "YSIZE"
  294.  
  295.     ;   Automatically make text big enough if the user
  296.     ;   doesn't specify Ysize
  297.  
  298.     IF Obj.YSize EQ 0 THEN BEGIN
  299.         GetValue, Obj, Names, ""
  300.         ISaveCmd, Unit, N_ELEMENTS(Names), "YSIZE"
  301.     ENDIF
  302.  
  303.     XPRINTF, Unit, ')'
  304.  
  305.     Obj2Ptr, Obj, Ptr
  306. END
  307.  
  308.  
  309. ;
  310. ;  TEXT_Alloc
  311. ;       Allocate a text object.  Don't allocate if ptr is non-nil
  312. ;
  313. PRO TEXT_Alloc, Parent, Ptr
  314.   COMMON WidEd_Comm
  315.  
  316.     IF KEYWORD_SET(Ptr) NE 0 THEN RETURN    ; if(ptr != NULL) return;
  317.  
  318.     Ptr     = WIDGET_BASE(GROUP=TopDlg)    ; Make a pointer
  319.     ValueId = WIDGET_BASE(GROUP=TopDlg)    ; Make a pointer for the value too
  320.  
  321.     ;   Make a Text object
  322.  
  323.     Obj     = {                 $
  324.         WE_TEXT,                $
  325.         Type:           'TEXT',$
  326.         Parent:         Parent, $ ; Pointer to parent
  327.         Id:             NewId(),$ ; Permanent Id
  328.         Dialog:         0L,     $ ; Save Dialog ID (need for Cut consistency)
  329.         Next:           0L,     $ ; index of next child/free/top
  330.         Name:           '',     $ ; Title or object name
  331.         FrameSize:      0,      $
  332.         Font:           '',     $
  333.         UValue:         '',     $
  334.         Value1:         ValueId,$
  335.         Value2:         '',     $ ; UNIMPLEMENTED and unused
  336.         ValueType:      0,      $ ; UNIMPLEMENTED and unused
  337.         XSize:          0,      $
  338.         YSize:          0,      $
  339.         XOffset:        0,      $
  340.         YOffset:        0,      $
  341.         AllEvent:       0,      $ ; ALL_EVENT flag
  342.         TextEdit:       1,      $ ; Set if can edit text (default TRUE)
  343.         TextNoNL:       0,      $ ; Suppress auto Newline?
  344.         TextScrolls:    0       $ ; Widget has scroll bars?
  345.     }
  346.     Obj2Ptr, Obj, Ptr                       ; Store object in pointer
  347. END
  348.